package com.java1;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class Java10Test {

    /*
   java10新特性一：局部变量的类型推断

    */
    @Test
    public void test1() {
        //1.声明变量时，根据所附的值，推断变量的类型
        var num = 10;
        var list = new ArrayList<Integer>();
        list.add(123);

        for (Integer i : list) {
            System.out.println(i);
        }
        //3.普通的遍历操作
        for (var i = 0; i < 100; i++) {
            System.out.println(i);
        }
    }

    @Test
    public void test2() {
        //1.局部变量不赋值，就不能实现类型推断
//        var num;

//        Supplier<Double> sup= Math::random;
        //2.lambda表示式中，左边的函数式接口不能声明为var
//        var sup= Math::random;

        //3.方法引用中，左边的函数式接口不能声明为var

    }

    //java10的新特性二：集合中新增的copyOf()，用于创建一个只读的集合
    @Test
    public void test5(){
        //示例1：
        var list1 = List.of("Java", "Python", "C");
        final List<String> list2 = List.copyOf(list1);
        System.out.println(list1 == list2);

        //示例2：
        var list3 = new ArrayList<String>();
        list3.add("123");
        final List<String> list4 = List.copyOf(list3);
        System.out.println(list3 == list4);

        //示例1和2代码基本一致，为什么一个为true,一个为false?
        //结论：copyOf(Xxx coll):如果参数coll本身就是一个只读集合，则copyOf()返回值即为当前的coll
        //如果参数coll不是一个只读集合，则copyOf()返回一个新的集合，这个集合是只读的。
    }
}
